class Solution:
    """
    方法： isPalindrome
    逻辑: 使用双指针方法判断字符串是否为回文。
    Args: s - 输入字符串
    Returns: 如果字符串是回文，返回True；否则返回False
    Time: O(n) - 需要遍历字符串一次
    Space: O(1) - 只使用了常数级的额外空间
    """
    def isPalindrome(self, s: str) -> bool:
        n = len(s)
        left, right = 0, n -1
        while left < right:
            while left < right and not s[left].isalnum():
                left += 1
            while left < right and not s[right].isalnum():
                right -= 1
            if left < right:
                if s[left].lower() != s[right].lower():
                    return False
            left, right = left + 1, right -1
        return True

    """
    方法： isPalindrome1
    逻辑: 使用字符串缓冲区判断字符串是否为回文。
    Args: s - 输入字符串
    Returns: 如果字符串是回文，返回True；否则返回False
    Time: O(n) - 需要遍历字符串两次
    Space: O(n) - 使用了字符串缓冲区存储字符
    """
    def isPalindrome1(self, s: str) -> bool:
        sgood = "".join(ch.lower() for ch in s if ch.isalnum())
        return sgood == sgood[::-1]
